#!/bin/bash

### 变量定义
mstack_script_dir=$(dirname "$(realpath "${BASH_SOURCE[0]}")")
source $mstack_script_dir/common_variables.sh

# 创建目标目录，如果目录不存在
mkdir -p $mstack_packet_docker_images

# 定义一个清理函数，用于在中断时退出脚本
cleanup() {
    echo "Operation interrupted. Cleaning up and exiting..."
    exit 1
}

# 捕获 SIGINT（Ctrl+C）并调用 cleanup 函数
trap cleanup SIGINT

# 获取所有镜像信息
docker images --format "{{.Repository}} {{.Tag}} {{.ID}}" | while read repo tag image_id
do
    # 替换镜像名中的斜杠（/）为下划线（_）
    repo_safe=$(echo "$repo" | tr / _)
    tag_safe=$(echo "$tag" | tr / _)

    # 生成保存文件的路径和文件名
    filename="$mstack_packet_docker_images/${image_id}_${repo_safe}_${tag_safe}.tar"

    # 输出当前正在导出的镜像信息
    echo "Saving image ${repo}:${tag} (ID: ${image_id}) to ${filename}"

    # 使用 docker save 命令导出镜像
    docker save -o "$filename" "$image_id" "$repo":"$tag"
done
